02 . Shell变量和逻辑判断及循环使用 您所在的位置:网站首页 shell 逻辑判断 02 . Shell变量和逻辑判断及循环使用

02 . Shell变量和逻辑判断及循环使用

2023-12-03 21:57| 来源: 网络整理| 查看: 265

Shell变量 系统变量

在命令行提示符直接执行 env、set 查看系统或环境变量。env 显示用户环境变量,set 显示 Shell预先定义好的变量以及用户变量。可以通过 export 导出成用户变量。

一些写Shell脚本时常用的系统变量

$SHELL 默认 Shell $HOME 当前用户家目录 $IFS 内部字段分隔符 $LANG 默认语言 $PATH 默认可执行程序路径 $PWD 当前目录 $UID 当前用户 ID $USER 当前用户 $HISTSIZE 历史命令大小,可通过 HISTTIMEFORMAT 变量设置命令执行时间 $RANDOM 随机生成一个 0 至 32767 的整数 $HOSTNAME 主机名 普通变量与临时环境变量

普通变量定义:VAR=value

临时环境变量定义:export VAR=value

变量引用:$VAR

下面看下他们之间区别:

Shell 进程的环境变量作用域是 Shell 进程,当 export 导入到系统变量时,则作用域是 Shell 进程及其 Shell 子进程。

Shell 进程的环境变量作用域是 Shell 进程,当 export 导入到系统变量时,则作用域是 Shell 进程及其 Shell 子进程。

ps axjf 输出的第一列是 PPID(父进程 ID),第二列是 PID(子进程 ID)当SSH 连接 Shell 时,当前终端 PPID(-bash)是 sshd 守护程序的 PID(root@pts/0),因此在当前终端下的所有进程的 PPID 都是-bash 的 PID,比如执行命令、运行脚本。

所以当在-bash 下设置的变量,只在-bash 进程下有效,而-bash 下的子进程 bash 是无效的,当export 后才有效。

进一步说明:再重新连接 SSH,去除上面定义的变量测试下所以在当前 shell 定义的变量一定要 export,否则在写脚本时,会引用不到。

还需要注意的是退出终端后,所有用户定义的变量都会清除。

在/etc/profile 下定义的变量就是这个原理.

位置变量

位置变量指的是函数或脚本后跟的第 n 个参数。

1−1−n,需要注意的是从第 10 个开始要用花括号调用,例如${10}

shift 可对位置变量控制,例如:

#!/bin/bash echo "1: $1" shift echo "2: $2" shift echo "3: $3" sh test.sh 1 2 3 1: 1 2: 3 3: # 每执行一次 shift 命令,位置变量个数就会减一,而变量值则提前一位。shift n,可设置向前移动n位。 特殊变量 $0 # 脚本自身名字 $? # 返回上一条命令是否执行成功,0 为执行成功,非 0 则为执行失败 $# # 位置参数总数 $* # 所有的位置参数被看做一个字符串 $@ # 每个位置参数被看做独立的字符串 $$ # 当前进程 PID $! # 上一条运行后台进程的 PID 变量引用 赋值运算符 示例 = 变量赋值 += 两个变量相加 自定义变量与引用 a=123 echo $a 123 a+=456 echo $a 123456 # Shell 中所有变量引用使用$符,后跟变量名 # 有时个别特殊字符会影响正常使用,就需要使用${a},例如 [root@redis ~]# b=123 [root@redis ~]# echo $b 123 [root@redis ~]# echo ${b} 123 # 有时个别特殊字符会影响正常引用,那么需要使用${VAR} [root@redis ~]# echo $b123 [root@redis ~]# echo ${b}123 123123 # 将命令结果作为变量值 [root@redis ~]# c=`echo 123` [root@redis ~]# echo $c 123 [root@redis ~]# c=$(echo 123) [root@redis ~]# echo $c 123 # 这里的反撇号等效于$(),都是用于执行 Shell 命令。 # 单引号和双引号 [root@redis ~]# d=1 [root@redis ~]# d="1 2 $d" [root@redis ~]# echo $d 1 2 1 [root@redis ~]# c=1 [root@redis ~]# c='1 2 $c' [root@redis ~]# echo $c 1 2 $c # 单引号是告诉 Shell 忽略特殊字符,而双引号则解释特殊符号原有的意义,比如$ 、 !。 Shell变量的输入

Shell变量除了可以直接赋值或脚本传参外,还可以使用read命令从标准输入获得,read为bash内置命令,可以通过help read查看帮助

语法格式

# read [参数] [变量名]

常用参数

# -p prompt: 设置提示信息 # -t timeout: 设置输入等待的事件,单位默认为秒

read的基本读入

如果不加-t read就会一直等待

# read后面的参数是一个变量 [root@youmen ~]# read -p 'please input you num:' num please input you num:234 [root@youmen ~]# echo $num 234 # 设置超时事件为3秒 read -t 3 -p "please input you num:" num please input you num: # 过3秒钟会脚本会自己执行结束

read在脚本中常用例子

[root@youmen ~]# sh test.sh please input you num: 1 2 1-2 =-1 1+2 =3 1*2 =2 1/2 =0 1**2 =1 1%2 =1 [root@youmen ~]# cat abc.sh #!/bin/bash read -t 18 -p "please input you num:" a b echo "$a-$b =$(( $a - $b ))" echo "$a+$b =$(( $a + $b ))" echo "$a*$b =$(( $a * $b ))" echo "$a/$b =$(( $a / $b ))" echo "$a**$b =$(( $a ** $b ))" echo "$a%$b =$(( $a % $b ))" # 利用echo 命令替代和read -p的功能 [root@youmen ~]# cat test.sh #!/bin/bash echo -n "请输入两个数字:" read a b echo "$a+$b =$(( $a + $b ))" echo "$a*$b =$(( $a * $b ))" echo "$a/$b =$(( $a / $b ))" echo "$a**$b =$(( $a ** $b ))" echo "$a%$b =$(( $a % $b ))" [root@youmen ~]# bash test.sh 请输入两个数字:2 3 2+3 =5 2*3 =6 2/3 =0 2**3 =8 2%3 =2 条件测试与比较 介绍

在bash的各种流程控制结构中通常要进行各种测试,然后根据测试结果执行不同的操作,有时也会通过与if等条件语句相结合,更方便的完成判断

条件测试通常由如下3种语法形式

# 语法1:test # 语法2:[] # 语法3:[[]] # 说明 # 1.上述语法格式1和语法格式2的写法是相等的。语法格式3为扩展的test命令。推荐使用语法格式2. # 2.在[[]]中可以使用通配符进行模式匹配。&&、||、>、


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有